#include <iostream>
using namespace std;

struct ListNode {
  int val;
  ListNode *next;
  ListNode(int x) : val(x), next(NULL) {}
};

// 203 : 删除链表中重复元素 虚拟头结点
class RemoveElements(){
public:
    ListNode* removeElements(ListNode* head, int val) {
		// 创建虚拟头结点
		ListNode* dummyHead = new ListNode(0);	// 虚拟头节点值无所谓 这里设置为0
		dummyHead->next = head;

		ListNode* cur = dummyHead;
		while(cur->next != NULL){
			if(cur->next->val == val){
				// 删除cur->next
				ListNode* delNode = cur->next;	// 存储待删除节点
				cur->next = delNode->next;		// 跳过要删除节点,当前节点指向下一个节点的下一个节点
				delete delNode;		// 释放内存 delNode->next = null（java）
			}
			else{
				cur = cur->next;
			}
		}        
		ListNode* retNode = dummyHead->next;
		delete dummyHead;
		return retNode;
    }
	
};

int main(){

}
